home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Shareware / IDimager Personal 4.2.0.3 / setup_IDimager_Personal_V4.exe / {app} / Scripts / Version Scripts / Remove versions from a version set that are in a specific placeholders.psc < prev    next >
Text File  |  2008-09-29  |  4KB  |  126 lines

  1. {
  2. Author: HB van Zwietering
  3. First version: 2008-09-29
  4.  
  5. this script will remove images from a version set that are placed in a specific
  6. place holder (if existing).
  7. }
  8. var
  9.   ADlg: TForm;
  10.   APlaceHolders: TCatalogPlaceHolders;
  11.   AListView: TListView;
  12.  
  13.   procedure CreateDialog;
  14.   var
  15.     ALbl: TLabel;
  16.     AOk: TButton;
  17.     ACol: TListColumn;
  18.     ALItem: TListItem;
  19.     i: Integer;
  20.   begin
  21.     ADlg := TForm.Create (Screen.ActiveForm);
  22.     ADlg.Caption := 'Select place holders to remove the versions from...';
  23.     ADlg.Height  := 400;
  24.     ADlg.Width   := 400;
  25.     ADlg.Position := poScreenCenter;
  26.  
  27.     AOk := TButton.Create (ADlg);
  28.     AOk.Parent := ADlg;
  29.     AOk.Top := ADlg.ClientHeight - 10 - AOk.Height;
  30.     AOk.Caption := '&Ok';
  31.     AOk.Default := True;
  32.     AOk.Left := 5;
  33.     AOk.ModalResult := mrOk;
  34.  
  35.     AListView := TListView.Create (ADlg);
  36.     AListView.Parent := ADlg;
  37.     AListView.Anchors := [akLeft, akTop, akRight];
  38.     AListView.Top := 15;
  39.     AListView.Left := 5;
  40.     AListView.Width := ADlg.ClientWidth - (2*5);
  41.     AListView.Height := AOk.Top - 5 - AListView.Top;
  42.     AListView.ViewStyle := vsReport;
  43.     AListView.ReadOnly := True;
  44.     AListView.RowSelect := True;
  45.     AListView.CheckBoxes := True;
  46.  
  47.     ACol := AListView.Columns.Add;
  48.     ACol.Caption := 'Placeholders';
  49.     ACol.Width := AListView.ClientWidth - 20;      // leave some room for the scrollbar
  50.  
  51.     for i := 0 to APlaceHolders.Count - 1 do
  52.     begin
  53.       if APlaceHolders.Items[i].Visible then
  54.       begin
  55.         ALItem := AListView.Items.Add;
  56.         ALItem.Caption := APlaceHolders.Items[i].PlaceHolder;
  57.       end;
  58.     end;
  59.   end;
  60.  
  61.   procedure ProcessImage (AImage: TImageItem; APhs: TCatalogPlaceHolders);
  62.   var
  63.     AMain: TCatalogItem;
  64.     ACatItem: TCatalogItem;
  65.     i: Integer;
  66.   begin
  67.     AMain := TCatalogItem.Create(nil);
  68.     try
  69.       if not Catalog.FindImageCombined (AImage, AMain, True, vptNone) then
  70.         exit;
  71.  
  72.       for i := 0 to APhs.Count - 1 do
  73.       begin
  74.         ACatItem := TCatalogItem.Create(nil);
  75.         if Catalog.EnumVersionForPlaceHolderInMain (AMain, APhs.Items[i], ACatItem) then
  76.           Catalog.DeleteVersionItem (ACatItem);
  77.         ACatItem.Free;
  78.       end;
  79.     finally
  80.       AMain.Free;
  81.     end;
  82.   end;
  83.  
  84. var
  85.   i: Integer;
  86.   ASelectedPlaceHolders: TCatalogPlaceHolders;
  87. begin
  88.   APlaceHolders := TCatalogPlaceHolders.Create (TCatalogPlaceHolder, '');
  89.   ASelectedPlaceHolders := TCatalogPlaceHolders.Create (TCatalogPlaceHolder, '');
  90.  
  91.   Catalog.EnumPlaceHolders (APlaceHolders, False);    // read all placeholders, without image counts
  92.  
  93.   // create a dialog
  94.   CreateDialog;
  95.   ADlg.ShowModal;
  96.  
  97.   if ADlg.ModalResult = mrOk then
  98.   begin
  99.     // find all selected place holders
  100.     for i := 0 to AListView.Items.Count - 1 do
  101.     begin
  102.       if AListView.Items.Item[i].Checked then
  103.       begin
  104.         //Say (APlaceHolders.Items[i].PlaceHolder);
  105.         APlaceHolders.Items[i].CopyTo (ASelectedPlaceHolders, False);
  106.       end;
  107.     end;
  108.  
  109.     if ASelectedPlaceHolders.Count > 0 then
  110.     begin
  111.       if Ask (WideFormat('Are you sure you want to remove the images assigned to the selected placeholder%s from their version set?', [iif(ASelectedPlaceHolders.Count > 1, 's', '')])) then
  112.       begin
  113.         for i := 0 to Selected.Count - 1 do
  114.           ProcessImage (Selected.Items[i], ASelectedPlaceHolders);
  115.       end;
  116.     end;
  117.   end;
  118.  
  119.   ADlg.Free;
  120.   ASelectedPlaceHolders.Free;
  121.   APlaceHolders.Free;
  122.  
  123.   RefreshPanels;
  124.   InvalidateCollection;
  125. end;
  126.